Coursera week10
Large Scale Machine Learning(大規模機械学習)
なぜビッグデータなのか?
どのアルゴリズムを使っても、データが多ければ多いほどよい分類精度が出るのは同じと言われています。つまり、多くデータを持っている者がよいモデルを作ることができるということです。
それに、データ数が大きいほうがモデルのオーバーフィット (Overfit. High Varianceとも言う)を防ぐことができ、より汎用性のあるモデルが期待できます。
Stochastic Gradient Descent(確率的最急降下法)
勾配(最急)降下法 (Gradient Descent)は汎用的な学習アルゴリズムです。これまで学んできたのは、バッチ勾配降下法 (Batch Gradient Descent)といい、パラメーター$ \theta の1回のアップデートにつきデータ数$ m 個分すべての誤差を合計するので、ビッグデータになればなるほどに計算に時間がかかってしまいます。
今回学習するのは、確率的勾配降下法 (Stochastic Gradient Descent)です。パラメーター$ \theta の1回のアップデートにつきデータ1個だけで誤差を計算し、それをデータ数$ m 回分行います。以下のようなアルゴリズムになります。
バッチ勾配降下法と確率的勾配降下法のアルゴリズム
https://gyazo.com/a006610dc6491b50b31ae968c1e9575e
各リピートで誤差の総和を計算しない分早いです。2つを比べると、リピート毎の$ J(\theta) の変化は以下のようなイメージになります。
バッチ勾配降下法と確率的勾配降下法の目的関数が減少するイメージ
https://gyazo.com/db1d3c32d1c0c9c2fc0b3ecabdd753ce
各リピートで1つのデータしか使わないパターンでも$ m 個全部使うパターンでもなく、$ b 個を使うことにしようというのもあります。これは、ミニバッチ勾配降下法 (Mini-batch Gradient Descent)と呼ばれています。
ミニバッチ勾配降下法のアルゴリズム
https://gyazo.com/f77f597cba3fda88ee02b6b6fd8c3f06
勾配降下法が収束しない場合は、学習率$ \alpha を小さくすると良いです。
Online Learning(オンライン学習)
ネットショッピングなどの大きなサービスだと、ユーザーがやってきては様々な行動をし、去っていきます。ユーザーの行動や嗜好を予測し、よりよいサービスを提供したいときには、オンライン学習を用います。
ユーザーの個人情報などから導出した$ X と、パラメーター$ \theta を用いて、ユーザーがある行動(広告をクリックする等)をする確率$ p(y=1|x;\theta) をモデルに学習させます。
Map-Reduce(マップリデュース)
データが大きいとき、並列処理 (Parallel Computing)が必要かもしれません。まず、データを分割し、各計算単位であるノード (Node)に振り分けます (Map step)。各ノードで担当分の計算をしたのち、元のマスターノードへと値を返し、マスターノードが集約してアウトプットを出力します (Reduce Step)。
マップリデュースのイメージ図
https://gyazo.com/c31bd7989ea9f433bbf84364f95e84c1
このときのノードは別々のコンピューターであってもいいですが、マルチコア (Multi-Core)CPU内蔵のコンピューターなら各CPUをノードとすることで1台で並列処理することもできます。